package edu.sdcet.lx01.service.impl;

import edu.sdcet.lx01.entity.Student;
import edu.sdcet.lx01.mapper.StudentMapper;
import edu.sdcet.lx01.service.StudentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentServiceImpl implements StudentService {
    private static final Logger logger = LoggerFactory.getLogger(StudentServiceImpl.class);

    //注入StudentMapper
    @Autowired
    private StudentMapper studentMapper;
    
    @Override
    public Student getStudentById(String studentId) {
        logger.info("查询学生信息：studentId={}", studentId);
        try {
            // 使用MyBatis-Plus的selectById方法
            Student student = studentMapper.selectById(studentId);
            logger.info("查询结果：student={}", student);
            return student;
        } catch (Exception e) {
            logger.error("查询学生信息失败：studentId={}, 错误信息={}", studentId, e.getMessage(), e);
            throw new RuntimeException("查询学生信息失败", e);
        }
    }

    @Override
    /**
     * 查询所有学生信息（无参数版本）
     * @return 学生列表
     */
    public List<Student> getAllStudents() {
        logger.info("开始查询所有学生信息");
        try {
            List<Student> students = studentMapper.selectList(null);
            logger.info("查询所有学生信息成功：学生数量={}", students.size());
            return students;
        } catch (Exception e) {
            logger.error("查询所有学生信息失败：错误信息={}", e.getMessage(), e);
            throw new RuntimeException("查询所有学生信息失败", e);
        }
    }
    /**
     * 根据学生ID更新学生信息
     * @param studentId 学生ID
     * @param student 更新后的学生对象
     * @return 是否更新成功
     */
    @Override
    public boolean updateStudentById(String studentId, Student student) {
        logger.info("更新学生信息：studentId={}, student={}", studentId, student);
        try {
            // 确保student对象的studentId与传入的参数一致
            student.setStudentId(studentId);
            // 更新时间可以在这里设置
            student.setUpdateTime("2025-10-13 09:04");
            
            // 使用MyBatis-Plus的updateById方法
            int result = studentMapper.updateById(student);
            logger.info("更新学生信息结果：影响行数={}", result);
            
            // 返回是否更新成功（影响行数大于0即为成功）
            return result > 0;
        } catch (Exception e) {
            logger.error("更新学生信息失败：studentId={}, 错误信息={}", studentId, e.getMessage(), e);
            throw new RuntimeException("更新学生信息失败", e);
        }
    }
    /**
     * 根据学生ID删除学生信息
     * @param studentId 学生ID
     * @return 是否删除成功
     */
    @Override
    public boolean deleteStudentById(String studentId) {
        logger.info("删除学生信息：studentId={}", studentId);
        try {
            // 使用MyBatis-Plus的deleteById方法
            int result = studentMapper.deleteById(studentId);
            logger.info("删除学生信息结果：影响行数={}", result);
            
            // 返回是否删除成功（影响行数大于0即为成功）
            return result > 0;
        } catch (Exception e) {
            logger.error("删除学生信息失败：studentId={}, 错误信息={}", studentId, e.getMessage(), e);
            throw new RuntimeException("删除学生信息失败", e);
        }
    }
    /**
     * 新增学生信息
     * @param student 学生对象
     * @return 是否新增成功
     */
    @Override
    public boolean addStudent(Student student) {
        logger.info("新增学生信息：student={}", student);
        try {
            // 设置创建时间和更新时间
            student.setCreateTime("2025-10-13 09:04");
            student.setUpdateTime("2025-10-13 09:04");
            
            // 使用MyBatis-Plus的insert方法
            int result = studentMapper.insert(student);
            logger.info("新增学生信息结果：影响行数={}", result);
            
            // 返回是否新增成功（影响行数大于0即为成功）
            return result > 0;
        } catch (Exception e) {
            logger.error("新增学生信息失败：错误信息={}", e.getMessage(), e);
            throw new RuntimeException("新增学生信息失败", e);
        }
    }
}
